package com.gds.wiki.cloud.admin.server.modular.sys.service;


import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gds.wiki.cloud.admin.client.sys.model.Dept;
import com.gds.wiki.cloud.admin.client.sys.model.query.DeptQuery;
import com.gds.wiki.cloud.admin.client.sys.vo.DeptVo;
import com.gds.wiki.cloud.admin.server.modular.sys.mapper.DeptMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author:wiki
 * @Date:Create in 2018/7/20 0020 上午 10:31
 */
@Service
public class DeptService extends ServiceImpl<DeptMapper, Dept> {

    @Autowired
    private DeptMapper deptMapper;

        public List<Long> deptIdsByPid(Long pid) {
        Map map=new HashMap();
        map.put("pid",pid);
        return deptMapper.deptIdsByPid(map);
    }


        public List<DeptVo>  treeByPid(DeptQuery deptQuery) {
        Long deptId= deptQuery.getDeptId();
        List<Dept> list=deptMapper.treeByPid(deptQuery);
        DeptVo deptVo=new DeptVo();
        deptVo.setId(deptId);
        if(deptId==0){
               if(list!=null){
                   if(list.get(0).getPid()==0){
                       deptVo.setPid(0l);
                       deptVo.setId(0l);
                       deptVo.setSimpleName("顶层");
                       deptVo.setFullName("顶层");
                   }
                   else {
                       BeanUtils.copyProperties(list.get(0),deptVo);
                   }
               }else {
                   deptVo.setPid(0l);
                   deptVo.setId(0l);
                   deptVo.setSimpleName("顶层");
                   deptVo.setFullName("顶层");
               }
        }else {
            if(list.size()>0){
                BeanUtils.copyProperties(list.get(0),deptVo);
            }
        }
        List<DeptVo> child=deptTree(list,deptVo);
        if(child.size()>0){
            deptVo.setChildren(child);
        }else {
            deptVo.setChildren(null);
            List<Long> pl=new ArrayList<>();
            pl.add(deptVo.getId());
            deptVo.setPids(pl);
        }

//        return deptVo;
        List<DeptVo> deptVoList=new ArrayList<>();
        deptVoList.add(deptVo);
        return deptVoList;
    }

        public List<DeptVo> deptTree(List<Dept> list, DeptVo parentDeptVo){
        List<DeptVo> tree=new ArrayList<>();
          for(Dept item:list){
              if(item.getPid().equals(parentDeptVo.getId())){
                  List<Long> pids=new ArrayList<>();
                  if(parentDeptVo.getPids()!=null&&parentDeptVo.getId()!=0){
                      for(Long a:parentDeptVo.getPids()){
                          pids.add(a);
                      }
                  }else {
                      List<Long> pidArray =new ArrayList<>();
                      pidArray.add(parentDeptVo.getId());
                      parentDeptVo.setPids(pidArray);
                  }
                  pids.add(parentDeptVo.getId());
                  DeptVo deptVo=new DeptVo();
                  deptVo.setPids(pids);
                  BeanUtils.copyProperties(item,deptVo);
                  List<DeptVo> child=deptTree(list,deptVo);
                  deptVo.setChildren(child.size()>0?child:null);
                  tree.add(deptVo);
              }
          }
//
//          list.forEach(item->{
//
//          });

          return tree;
    }
}
